Conversation
|
@czurnieden could you maybe have a look if you have the time? You've added parts of the removed code in 984d3ff and I'm not sure whether this should/can really be removed. |
|
I based it on the development branch. I thought it was more up to date. |
|
I don't know if it is how readable in this form: Starting with x[i+1] = x[i] - f(x[i])/f'(x[i]), where f(x) = x^b - a So x[i+1] = x[i] - (x[i] ^ b - a) / ( b * x[i] ^ (b-1) ) (this is in the code) When x[i] ^ b > a, x[i+1] will be rounded up. Algebraically: Hence the code removal (unless I'm missing something...). |
|
It's too warm too sleep, so here we go:
That was three years ago! But I appreciate your optimism regarding my long-term memory ;-) I am sure that I did no proper analysis, so there are some places with…let's call it "belt&girdle" code. The start-value gets calculated based on the equality With addition of unity we get the inequality I'm not sure anymore why I added the loop but I also had some code to find a more exact start-value by doing some rounds of bisection (works well for larger bases and also a little bit for smaller bases but it adds a lot of code and nobody wanted it ;-) ), so it might be a leftover from that experiment. But no matter the exact reason: it is superfluous code in case of One last question: are you, @ssinai1 sure that the main loop cannot oscillate? |
|
Thanks for the explanation. My reasoning is as follows: This means that not only is As for the second part of the question: |
|
What is that in lines 110ff? Ouch! How could that have slipped through the tests for over three years? But while we are at it: If we can assume that the error is at most one with a start-value of Is that correct? |
|
I rewrote it for downward rounding iteration. The mp_div seems to round towards 0, so it needed the remainder... |
No, it is truncating! E.g.: both But I like where it is going to! Thanks for the work! BTW: Libtommath is not as frugal as it looks from the outside, it has some useful macros in These are a bit cheaper than a full call to If I understood it correctly That macro is not in |
|
Anyway, in this case a division rounding to negative infinity would be more practical. |
Do you use this often inside the library or in code using libtommath? IMO it'd be fine to go in either of |
Mainly externally, so |
|
Sorry @ssinai1 for highjacking your PR for this discussion :) I've created #537 for that purpose now. We should continue with this question #532 (comment) now :) (and by 'we' I mostly mean @ssinai1 and @czurnieden :D thanks) |
|
October 2022. Oh, my, completely forgotten, sorry! @ssinai1 if you are still out there: could you please rebase this PR to the current develop branch so I can give it my "seal of approval"? Thank you very much! |
|
@ssinai1 Can you please rebase on top of develop, squash those commits and write a bit of a commit message which summarizes what was done. |
Set a closer initial value for iteration and remove some unnecessary code.
By the way, in the first for loop, one of the err=MP_OKAY branches (never reached) did not set c.